using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace Sigecov.Models.Mapping
{
    public class FuncionarioMap : EntityTypeConfiguration<Funcionario>
    {
        public FuncionarioMap()
        {
            // Primary Key
            this.HasKey(t => t.funId);

            // Properties
            this.Property(t => t.funNome)
                .IsRequired()
                .HasMaxLength(30);

            this.Property(t => t.funSobrenome)
                .IsRequired()
                .HasMaxLength(30);

            this.Property(t => t.funCargo)
                .IsRequired()
                .HasMaxLength(50);

            this.Property(t => t.funTipoLogradouro)
                .HasMaxLength(40);

            this.Property(t => t.funLogradouro)
                .IsRequired()
                .HasMaxLength(80);

            this.Property(t => t.funBairro)
                .IsRequired()
                .HasMaxLength(40);

            this.Property(t => t.funCep)
                .IsRequired()
                .HasMaxLength(10);

            this.Property(t => t.funComplemento)
                .HasMaxLength(70);

            this.Property(t => t.funTelefone)
                .IsRequired()
                .HasMaxLength(14);

            this.Property(t => t.funObservacoes)
                .HasMaxLength(500);

            // Table & Column Mappings
            this.ToTable("Funcionarios");
            this.Property(t => t.funId).HasColumnName("funId");
            this.Property(t => t.funNome).HasColumnName("funNome");
            this.Property(t => t.funSobrenome).HasColumnName("funSobrenome");
            this.Property(t => t.funCargo).HasColumnName("funCargo");
            this.Property(t => t.funDataNascimento).HasColumnName("funDataNascimento");
            this.Property(t => t.funDataContratacao).HasColumnName("funDataContratacao");
            this.Property(t => t.funTipoLogradouro).HasColumnName("funTipoLogradouro");
            this.Property(t => t.funLogradouro).HasColumnName("funLogradouro");
            this.Property(t => t.funNumero).HasColumnName("funNumero");
            this.Property(t => t.funBairro).HasColumnName("funBairro");
            this.Property(t => t.funCep).HasColumnName("funCep");
            this.Property(t => t.funComplemento).HasColumnName("funComplemento");
            this.Property(t => t.cidId).HasColumnName("cidId");
            this.Property(t => t.funTelefone).HasColumnName("funTelefone");
            this.Property(t => t.funRamal).HasColumnName("funRamal");
            this.Property(t => t.funObservacoes).HasColumnName("funObservacoes");
            this.Property(t => t.supId).HasColumnName("supId");

            // Relationships
            this.HasRequired(t => t.Cidade)
                .WithMany(t => t.Funcionarios)
                .HasForeignKey(d => d.cidId);
            this.HasRequired(t => t.Supervisor)
                .WithMany(t => t.Funcionarios)
                .HasForeignKey(d => d.supId);

        }
    }
}
